# Python urllib
# Python urllib 库用于操作网页 URL，并对网页的内容进行抓取处理。
# urllib 包 包含以下几个模块：
#     urllib.request - 打开和读取 URL。
#     urllib.error - 包含 urllib.request 抛出的异常。
#     urllib.parse - 解析 URL。
#     urllib.robotparser - 解析 robots.txt 文件。
# 使用 urllib.request 的 urlopen 方法来打开一个 URL，语法格式如下：
# urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
#     url：url 地址。
#     data：发送到服务器的其他数据对象，默认为 None。
#     timeout：设置访问超时时间。
#     cafile 和 capath：cafile 为 CA 证书， capath 为 CA 证书的路径，使用 HTTPS 需要用到。
#     cadefault：已经被弃用。
#     context：ssl.SSLContext类型，用来指定 SSL 设置。

import urllib.request
from urllib.request import urlopen

myURL = urlopen("https://www.baidu.com/")
# 使用 read() 函数获取网页的 HTML 实体代码。read() 是读取整个网页内容，我们可以指定读取的长度：
print(myURL.read(300))

print(myURL.readline())     # readline() - 读取文件的一行内容

lines = myURL.readlines()   # readlines() - 读取文件的全部内容，它会把读取的内容赋值给一个列表变量。
for line in lines:
    print(line)

# 使用 getcode() 函数获取网页状态码
myURL1 = urllib.request.urlopen("https://www.runoob.com/")
print(myURL1.getcode())   # 200 说明网页正常

try:
    myURL2 = urllib.request.urlopen("https://www.runoob.com/no.html")
except urllib.error.HTTPError as e:
    if e.code == 404:
        print(404)   # 404 说明网页不存在:

# 将抓取的网页保持到本地，可以使用 Python3 File write() 方法
# 更多Python File 处理，可以参阅https://www.runoob.com/python3/python3-file-methods.html
from urllib.request import urlopen

myURL = urlopen("https://www.runoob.com/")
f = open("runoob_urllib_test.html", "wb")
content = myURL.read()  # 读取网页内容
f.write(content)
f.close()

# URL 的编码与解码可以使用 urllib.request.quote() 与 urllib.request.unquote() 方法：
import urllib.request

encode_url = urllib.request.quote("https://www.runoob.com/")  # 编码
print(encode_url)

unencode_url = urllib.request.unquote(encode_url)    # 解码
print(unencode_url)